package com.essential.program;

/*
##if判断
    在Java程序中，如果要根据条件来决定是否执行某一段代码，就需要if语句
    if语句的基本语法是：

    if (条件) {
        // 条件满足时执行
    }
    根据if的计算结果（true还是false），JVM决定是否执行if语句块（即花括号{}包含的所有语句）。
##else
    if语句还可以编写一个else { ... }，当条件判断为false时，将执行else的语句块：
    注意，else不是必须的。
##串联if...else if
    还可以用多个if ... else if ...串联。
    串联使用多个if时，要特别注意判断顺序。
##判断引用类型相等
    在Java中，判断值类型的变量是否相等，可以使用==运算符。但是，判断引用类型的变量是否相等，==表示“引用是否相等”，或者说，是否指向同一个对象。例如，下面的两个String类型，它们的内容是相同的，但是，分别指向不同的对象，用==判断，结果为false：
    要判断引用类型的变量内容是否相等，必须使用equals()方法

##小结
    if ... else可以做条件判断，else是可选的；
    不推荐省略花括号{}；
    多个if ... else串联要特别注意判断顺序；
    要注意if的边界条件；
    要注意浮点数判断相等不能直接用==运算符；
    引用类型判断内容相等要使用equals()，注意避免NullPointerException。
 */
public class IF {
    public static void main(String[] args) {
        //条件判断
        int n = 70;
        if (n >= 60) {
            System.out.println("及格了");
        }
        System.out.println("END");
        //当if语句块只有一行语句时，可以省略花括号{}：
        //尽量不要这样
        //由于使用缩进格式，很容易把两行语句都看成if语句的执行块，但实际上只有第一行语句是if的执行块。在使用git这些版本控制系统自动合并时更容易出问题，所以不推荐忽略花括号的写法
        int n1 = 70;
        if (n1 >= 60)
            System.out.println("及格了");
        System.out.println("END");

        //else
        int n2 = 70;
        if (n2 >= 60) {
            System.out.println("及格了");
        } else {
            System.out.println("挂科了");
        }
        System.out.println("END");

        //if ... else if ...
        if (n >= 90) {
            // n >= 90为true:
            System.out.println("优秀");
        } else {
            // n >= 90为false:
            if (n >= 60) {
                // n >= 60为true:
                System.out.println("及格了");
            } else {
                // n >= 60为false:
                System.out.println("挂科了");
            }
        }

        //判断引用相等
        String s1 = "hello";
        String s2 = "HELLO".toLowerCase();
        System.out.println(s1);
        System.out.println(s2);

        //虽然内容一样但是指向的对象不一样所以不对
        if (s1 == s2) {
            System.out.println("s1 == s2");
        } else {
            System.out.println("s1 != s2");
        }
        //判断内容是否相等的办法用 .equals()
        if (s1.equals(s2)) {
            System.out.println("s1 equals s2");
        } else {
            System.out.println("s1 not equals s2");
        }

        //执行语句s1.equals(s2)时，如果变量s1为null，会报NullPointerException
        //  String s1 = null;
        //        if (s1.equals("hello")) {
        //            System.out.println("hello");
        //        }

        //执行语句s1.equals(s2)时，如果变量s1为null，会报NullPointerException
        String s3 = null;
        if (s3 != null && s1.equals("hello")) {
            System.out.println("hello");
        }

    }
}
